/** 精确匹配
 * 
 */
// const str = 'hello'
// const reg = /hello/
// console.log(reg.test(str))  //true

/**横向模糊匹配
 * 
 */
// const reg = /ab{2,6}cd{1,3}/g  // 1个a ，2-6个b， 1个c， 1-3个d
// console.log(r.match('abbcdd abcd abbbcddd'))  //['abbcdd', 'abbbcddd']

//纵向模糊匹配
// const r = new Reg(/a[abc]d{1,6}/g)   //1个a， a或b或c， 1-6个d
// console.log(r.test('abdddd')) //true

/** 字符组
 * [123456abcdefHIJKLM]  简写  [1-6a-fH-M]
 * \d  digit  表示[0-9]
 * \D  表示 [^0-9]
 * \w  word  表示[0-9a-zA-Z_] 注意末尾有个下划线
 * \W  表示 [^0-9a-zA-Z_]
 * \s  space  表示[\t\v\n\r\f]
 * \S  表示  [^\t\v\n\r\f]  
 * .  通配符  表示[^\n\r\u2028\2029] 除了几个空格符号，其他全部匹配
 * example: 要表示所有字符可以用：
 *      [/d/D] [/w/W] [/s/S] [^]
 */

 /** 量词
  * {m,}  至少出现m次
  * {m} 出现m次
  * ?  {0,1} 
  * +  {1,}
  * *  {0,}
  * 
  * 注意： 量词后面加上 ？ 则表示惰性匹配
  */

/** 多选分支
 *  (p1|p2|p3)
 *  注意，多选分支是惰性匹配，即当第一个分支匹配成功，则之后的分支不再进行匹配
 */
// console.log('goodbye'.match(/goodbye|good/g))   //['goodbye']
// console.log('goodbye'.match(/good|goodbye/g))   //['good']

/** 案列：匹配16进制颜色
 * 如： #ff123f  #fff
 * 
 */
// const color = '#fff #f123456 #658912 #fcabcd #zzf'
// const reg = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g
// console.log(color.match(reg))  // [ '#fff', '#f12345', '#658912', '#fcabcd' ]

/** 案列： 匹配11位手机号码
 * 
 * 
 */
// const phone = '15896120191'
// const reg = /^(13|15|18)[\d]{9}$/g
// console.log(reg.test(phone))

/** 案例： 匹配24小时制日期
 * 
 */

//  const date = '19:16'
//  const reg = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/
//  console.log(reg.test(date))
//如果第一位是0则可以省略
// const date = '9:07'
// const reg = /^(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9])$/
// console.log(reg.test(date))


/** 匹配日期  yyyy-mm-dd
 * 
 */

// const reg = /^[0-2][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
// const date = '2017-06-17'
// console.log(reg.test(date))


/** windows操作系统文件路径
 *  分析  整体格式为   盘符:\文件夹\文件夹
 * 首先不能有特殊字符   用 [^\\:*<>|"?\r\n/] 来表示合法字符  
 */
// const reg = /^[a-zA-Z]:\\([^\\:*<>|"?\r\n/]+\\)*([^\\:*<>|"?\r\n/]+)?$/
// const path = 'F:\\javascript\\superjs'
// console.log(reg.test(path))

/** 匹配id 
 *
 */
// const reg = /id=".*"/g
// const element = '<div id="container" class="main"></div>'
// console.log(element.match(reg))   //[ 'id="container" class="main"' ] 
//分析原因：   .是通配符，  *是贪婪匹配，  它会匹配到最后一个"才会停止。解决方案：将正则改为惰性匹配

// const reg = /id=".*?"/g
// const element = '<div id="container" class="main"></div>'
// console.log(element.match(reg))  //[ 'id="container"' ]

//优化如下
// const reg = /id="[^"]*"/g
// const element = '<div id="container" class="main"></div>'
// console.log(element.match(reg))

